package 栈.有效的括号;

import java.util.ArrayDeque;
import java.util.Deque;
/**
 * 题目优化
 * Stack是线程安全的类，他的push，pop，peek等方法是同步的
 * 哪我们可以用ArrayDeque来代替Stack
 * */

class Solution1 {
    public boolean isValid(String s) {
        // 使用ArrayDeque作为栈使用
        Deque<Character> stack = new ArrayDeque<>();

         // 遍历字符串中的每个字符
       for(char c : s.toCharArray()){
         // 如果是开括号，压入栈中
         if(c == '(' || c == '[' || c == '{'){
            stack.push(c);
         }else{
            // 如果是闭括号，检查栈是否为空，以及栈顶元素是否与之匹配
            if(stack.isEmpty()){
                return false; // 栈为空，说明没有对应的开括号
            }
            // 检查栈顶元素
            char top = stack.pop();
            if((c == ')' && top != '(') || (c == ']' && top != '[') || (c == '}' && top != '{')){
                return false; // 栈顶元素与当前闭括号不匹配
            }
         }
       }
       // 如果栈为空，说明所有括号都正确匹配
       return stack.isEmpty(); 
    }
}